/**
 * 使用示例：如何调用生成的TypeScript接口
 * 这个文件展示了如何使用根据后端Swagger文档生成的实际API函数
 * 
 * 注意：后端使用Cookie认证，无需手动处理token
 * 所有认证相关的API调用会自动携带cookie
 */

import { client } from '../client.gen.ts';
import { 
  getCourseList, 
  login, 
  register, 
  getCurrentUser,
  getCartList,
  addToCart,
  checkLogin,
  logout
} from '../sdk.gen.ts';
import type { 
  UserRegisterRequest, 
  UserLoginRequest, 
  ApiResponseUser,
  ApiResponseCartItemDto,
  CartItemDto,
  User,
  Course
} from '../types.gen.ts';

// 注意：生成的client已经包含了基础配置
// 由于后端使用Cookie认证，无需额外配置token

// 示例1：获取课程列表
export async function fetchCourses(): Promise<Course[] | undefined> {
  try {
    const response = await getCourseList({
      client,
      query: {
        page: 1,
        size: 10
      }
    });
    
    // 检查响应状态
    if (response.data?.code === 200) {
      console.log('课程列表:', response.data.data?.records);
      return response.data.data?.records;
    } else {
      console.error('获取课程列表失败:', response.data?.message);
      return undefined;
    }
  } catch (error) {
    console.error('获取课程列表异常:', error);
    return undefined;
  }
}

// 示例2：用户登录（使用Cookie认证）
export async function userLogin(usernameOrEmail: string, password: string): Promise<ApiResponseUser | undefined> {
  try {
    const loginRequest: UserLoginRequest = {
      usernameOrEmail,
      password,
      rememberMe: true
    };

    const response = await login({
      client,
      body: loginRequest
    });
    
    if (response.data?.code === 200) {
      console.log('登录成功:', response.data.message);
      return response.data;
    } else {
      console.error('登录失败:', response.data?.message);
      return undefined;
    }
  } catch (error) {
    console.error('登录异常:', error);
    return undefined;
  }
}

// 示例3：检查当前登录状态
export async function checkLoginStatus(): Promise<boolean> {
  try {
    const response = await checkLogin({ client });
    return response.data?.code === 200;
  } catch (error) {
    console.error('检查登录状态失败:', error);
    return false;
  }
}

// 示例4：用户注册
export async function userRegister(registerData: UserRegisterRequest): Promise<ApiResponseUser | undefined> {
  try {
    const response = await register({
      client,
      body: registerData
    });
    
    if (response.data?.code === 200) {
      console.log('注册成功:', response.data.message);
      return response.data;
    } else {
      console.error('注册失败:', response.data?.message);
      return undefined;
    }
  } catch (error) {
    console.error('注册异常:', error);
    return undefined;
  }
}

// 示例5：获取当前用户信息（自动携带cookie认证）
export async function fetchCurrentUser(): Promise<User | undefined> {
  try {
    const response = await getCurrentUser({ client });
    
    if (response.data?.code === 200) {
      console.log('当前用户信息:', response.data.data);
      return response.data.data;
    } else {
      console.error('获取用户信息失败:', response.data?.message);
      return undefined;
    }
  } catch (error) {
    console.error('获取用户信息异常:', error);
    return undefined;
  }
}

// 示例6：获取购物车列表（自动携带cookie认证）
export async function fetchCartList(): Promise<CartItemDto[] | undefined> {
  try {
    const response = await getCartList({ client });
    
    if (response.data?.code === 200) {
      console.log('购物车列表:', response.data.data);
      return response.data.data;
    } else {
      console.error('获取购物车失败:', response.data?.message);
      return undefined;
    }
  } catch (error) {
    console.error('获取购物车异常:', error);
    return undefined;
  }
}

// 示例7：添加商品到购物车（自动携带cookie认证）
export async function addCourseToCart(courseId: number, quantity: number = 1): Promise<ApiResponseCartItemDto | undefined> {
  try {
    const response = await addToCart({
      client,
      body: {
        courseId,
        quantity
      }
    });
    
    if (response.data?.code === 200) {
      console.log('添加成功:', response.data.message);
      return response.data;
    } else {
      console.error('添加失败:', response.data?.message);
      return undefined;
    }
  } catch (error) {
    console.error('添加购物车异常:', error);
    return undefined;
  }
}

// 示例8：用户登出（清除cookie认证）
export async function userLogout(): Promise<boolean> {
  try {
    const response = await logout({ client });
    
    if (response.data?.code === 200) {
      console.log('登出成功');
      return true;
    } else {
      console.error('登出失败:', response.data?.message);
      return false;
    }
  } catch (error) {
    console.error('登出异常:', error);
    return false;
  }
}

// 示例9：错误处理工具函数
export function handleApiError(error: any, context: string) {
  if (error.response) {
    console.error(`${context} - 服务器错误:`, error.response.data?.message || error.response.statusText);
  } else if (error.request) {
    console.error(`${context} - 网络错误: 无法连接到服务器`);
  } else {
    console.error(`${context} - 请求错误:`, error.message);
  }
  
  return {
    success: false,
    message: error.response?.data?.message || '操作失败，请稍后重试'
  };
}

// 示例10：完整的用户登录流程
export async function completeLoginFlow(username: string, password: string) {
  try {
    // 1. 用户登录
    const loginResult = await userLogin(username, password);
    if (!loginResult?.data) {
      return { success: false, message: '登录失败' };
    }

    // 2. 验证登录状态
    const isLoggedIn = await checkLoginStatus();
    if (!isLoggedIn) {
      return { success: false, message: '登录状态验证失败' };
    }

    // 3. 获取用户信息
    const userInfo = await fetchCurrentUser();
    
    return {
      success: true,
      user: userInfo,
      message: '登录成功'
    };
  } catch (error) {
    return handleApiError(error, '登录流程');
  }
}